/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package pe.edu.uch.syscom.managedbeans;

import java.util.*;
import javax.faces.event.ActionEvent;
import javax.faces.model.SelectItem;
import pe.edu.uch.syscom.managedbeans.uibeans.UIVentaBean;
import pe.edu.uch.syscom.managedbeans.uibeans.UIVentaDetalleBean;
import pe.edu.uch.syscom.mapping.TbCatalogo;
import pe.edu.uch.syscom.mapping.TbVenta;
import pe.edu.uch.syscom.mapping.TbVentaDetalle;
import pe.edu.uch.syscom.utils.CommonDAO;
import pe.edu.uch.syscom.utils.CommonWeb;
import pe.edu.uch.syscom.utils.ConstantesWeb;

/**
 *
 * @author Jose Tejada
 */
public class ModCajaMB {

    private String m_sEstadoVenta = ConstantesWeb.ESTADO_VENTA_PENDIENTE;
    private String m_sOncomplete;
    private Calendar m_calVerVentDesde = Calendar.getInstance();
    private Calendar m_calVerVentHasta = Calendar.getInstance();
    private UIVentaBean m_uiVentaSelec;
    private UIVentaDetalleBean m_uiVentaDetSelec;
    private SelectItem[] m_cboEstadoVentas;
    private Map<Integer, UIVentaBean> m_hmVentasRegistradas;

    public ModCajaMB() {
        m_calVerVentDesde = Calendar.getInstance();
        m_calVerVentHasta = Calendar.getInstance();
    }

    public Date getCalVerVentDesde() {
        return m_calVerVentDesde.getTime();
    }

    public void setCalVerVentDesde( Date calVerVentDesde ) {
        this.m_calVerVentDesde.setTime( calVerVentDesde );
    }

    public void setCalVerVentDesde( Calendar calVerVentDesde ) {
        this.m_calVerVentDesde = calVerVentDesde;
    }

    public Date getCalVerVentHasta() {
        return m_calVerVentHasta.getTime();
    }

    public void setCalVerVentHasta( Date calVerVentHasta ) {
        m_calVerVentHasta.setTime( calVerVentHasta );
    }

    public UIVentaBean getVentaSelec() {
        return m_uiVentaSelec;
    }

    public void setVentaSelec( UIVentaBean ventaSelec ) {
        this.m_uiVentaSelec = ventaSelec;
    }

    public UIVentaDetalleBean getVentaDetSelec() {
        return m_uiVentaDetSelec;
    }

    public void setVentaDetSelec( UIVentaDetalleBean uiVentaDetSelec ) {
        this.m_uiVentaDetSelec = uiVentaDetSelec;
    }

    public void setLstVentasRegistradas( List<UIVentaBean> lstVentasRegistradas ) {
    }

    public List<UIVentaBean> getLstVentasRegistradas() {
        List<UIVentaBean> lstAuxVentReg;
        if ( m_hmVentasRegistradas == null ) {
            m_hmVentasRegistradas = new HashMap<Integer, UIVentaBean>();
        }
        lstAuxVentReg = new ArrayList<UIVentaBean>( m_hmVentasRegistradas.values() );
        return lstAuxVentReg;
    }

    public Map<Integer, UIVentaBean> getHmVentasRegistradas() {
        return m_hmVentasRegistradas;
    }

    public void setHmVentasRegistradas( Map<Integer, UIVentaBean> hmVentasRegistradas ) {
        m_hmVentasRegistradas = hmVentasRegistradas;
    }

    public String getEstadoVenta() {
        return m_sEstadoVenta;
    }

    public void setEstadoVenta( String sEstadoVenta ) {
        m_sEstadoVenta = sEstadoVenta;
    }

    public String getOncomplete() {
        return m_sOncomplete;
    }

    public void setOncomplete( String sOncomplete ) {
        m_sOncomplete = sOncomplete;
    }

    public SelectItem[] getCboEstadoVentas() {
        int iSizeCat;
        TbCatalogo catEstVent;
        List<TbCatalogo> lstCatEstadosVenta;
        try {
            lstCatEstadosVenta = CommonDAO.getTbCatalogoDAO().loadListaCatalogos( "006" );
            iSizeCat = lstCatEstadosVenta.size();
            m_cboEstadoVentas = new SelectItem[ iSizeCat ];
            for ( int i = 0; i < iSizeCat; i++ ) {
                catEstVent = lstCatEstadosVenta.get( i );
                m_cboEstadoVentas[i] = new SelectItem( catEstVent.getCodigoGrupo() + catEstVent.getCodigoElemento(), catEstVent.getDescripcionElemento() );
            }
//            m_sEstadoVenta = ConstantesWeb.ESTADO_VENTA_PENDIENTE;
            listarVentasPorEstado( null );
        } catch ( Exception ex ) {
            m_cboEstadoVentas = new SelectItem[ 1 ];
            m_cboEstadoVentas[0] = new SelectItem( "0", "[Seleccione]" );
            lstCatEstadosVenta = new ArrayList<TbCatalogo>();
        }
        return m_cboEstadoVentas;
    }

    public void setCboEstadoVentas( SelectItem[] cboEstadoVentas ) {
        this.m_cboEstadoVentas = cboEstadoVentas;
    }

    //---FIN SETTER Y GETTER
    public List<UIVentaBean> listarVentasPorEstado( ActionEvent event ) {
        int iSizeVent;
        UIVentaBean uiVenta;
        TbVenta tbVenta;
        List<TbVenta> lstTbVentas;

        m_hmVentasRegistradas = new HashMap<Integer, UIVentaBean>();

        lstTbVentas = CommonDAO.getTbVentaDAO().listarVentasPorEstadoYFecha( m_sEstadoVenta, m_calVerVentDesde, m_calVerVentHasta );
        iSizeVent = lstTbVentas.size();
        int iCont = 0;
        for ( int i = 0; i < iSizeVent; i++ ) {
            tbVenta = lstTbVentas.get( i );
            if ( tbVenta.getActivo().intValue() == 1 ) {
                uiVenta = new UIVentaBean();
                uiVenta.convertir( ++iCont, tbVenta );
                m_hmVentasRegistradas.put( uiVenta.getIdVenta(), uiVenta );
            }
        }
        if ( m_uiVentaSelec != null ) {
            m_uiVentaSelec = m_hmVentasRegistradas.get( m_uiVentaSelec.getIdVenta() );
        }
//        return m_hmVentasRegistradas;
        return getLstVentasRegistradas();
    }

    public void verDetalleVenta( ActionEvent event ) {
        int iIdVenta;
        String sIdVenta;

        sIdVenta = CommonWeb.getParamFromUI( "idVenta" );
        iIdVenta = sIdVenta == null || sIdVenta.isEmpty() ? 0 : Integer.parseInt( sIdVenta );

        m_uiVentaSelec = m_hmVentasRegistradas.get( iIdVenta );

        m_sOncomplete = "Richfaces.showModalPanel('mpProcesarCobro')";
    }

    public void confirmAnularVenta( ActionEvent event ) {
        int iIdVenta;
        String sIdVenta;

        sIdVenta = CommonWeb.getParamFromUI( "idVenta" );
        iIdVenta = sIdVenta == null || sIdVenta.isEmpty() ? 0 : Integer.parseInt( sIdVenta );
        m_uiVentaSelec = m_hmVentasRegistradas.get( iIdVenta );
        m_sOncomplete = "Richfaces.showModalPanel('mpConfirmarAnulVent')";
    }

    public void anularVenta( ActionEvent event ) {
        int iRes;
        TbVenta tbVenta;
        m_sOncomplete = "";
        if ( m_uiVentaSelec != null ) {
//            tbVenta = CommonDAO.getTbVentaDAO().traerVentaPorId( m_uiVentaSelec.getIdVenta() );
            tbVenta = m_uiVentaSelec.getTbVenta();
            if ( tbVenta != null ) {
                iRes = CommonDAO.getTbVentaDAO().cambiarEstadoVenta( tbVenta, ConstantesWeb.ESTADO_VENTA_ANULADA );
                if ( iRes == 1 ) {
                    m_sOncomplete = "alert('La venta se anuló correctamente');";
                } else {
                    m_sOncomplete = "alert('Error al anular la venta.');";
                }
            }
        }

        m_sOncomplete += "Richfaces.hideModalPanel('mpConfirmarAnulVent')";
    }

    public void confirmQuitarVentaDetalle( ActionEvent event ) {
        int iIdVentaDet;
        String sIdVentaDet;

        sIdVentaDet = CommonWeb.getParamFromUI( "idVentDet" );
        iIdVentaDet = sIdVentaDet == null || sIdVentaDet.isEmpty() ? 0 : Integer.parseInt( sIdVentaDet );

        for ( TbVentaDetalle vd : m_uiVentaSelec.getLstVentaDetalle() ) {
            if ( iIdVentaDet == vd.getIdVentaDetalle().intValue() ) {
                m_uiVentaDetSelec = new UIVentaDetalleBean( vd.getIdVentaDetalle() );
                break;
            }
        }

        m_sOncomplete = "Richfaces.showModalPanel('mpConfirmarQuitarVentDet')";
    }

    public void quitarVentaDetalle( ActionEvent event ) {
        TbVentaDetalle tbVentaDetAux = null;

        if ( m_uiVentaDetSelec != null ) {
            for ( TbVentaDetalle vd : m_uiVentaSelec.getLstVentaDetalle() ) {
                if ( vd.getIdVentaDetalle().intValue() == m_uiVentaDetSelec.getIdVentaDetalle().intValue() ) {
                    tbVentaDetAux = vd;
                    break;
                }
            }
            if ( tbVentaDetAux != null ) {
                m_uiVentaSelec.getLstVentaDetalle().remove( tbVentaDetAux );
                tbVentaDetAux.setActivo( 0 );
                CommonDAO.getTbVentaDAO().actualizarVentDet( tbVentaDetAux );
                listarVentasPorEstado( null );
            }
        }
        m_sOncomplete = "alert('El producto se quitó  correctamente');Richfaces.hideModalPanel('mpConfirmarQuitarVentDet')";
    }

    public void grabarPago( ActionEvent event ) {
        int iRes;

        try {
            iRes = CommonDAO.getTbVentaDAO().efectuarPago( m_uiVentaSelec );
            if ( iRes == ConstantesWeb.OK ) {
            }
        } catch ( Exception ex ) {
            ex.printStackTrace();
        }

    }
}
